<?php

/**
 * @author PeoneEr
 * @package aion personal cabinet v1.0
 * @copyright Aion Factory Inc. 2010-2011
 * @license GNU v3
 * @link Ai-Factory.ru && http://code.google.com/p/aionprivateofficev2
 */
require_once "core/application/models/musers/musers.php";
require_once "core/application/controllers/cmoney.php";
require_once "core/application/classes/isOnlineClass.php";
require_once "core/application/classes/errorClass.php";
require_once "core/application/controllers/crequests.php";
require_once "core/application/classes/selectValueClass.php";

class Players_Controller extends Users_Model {

    private static $_instance = NULL;
    private $_express = 0;
    private $_newBalance = 0;
    private $_id = 0;
    private $_params = array();
    private $_balance = 0;

    public static function getInstance() {
        if (is_null(self::$_instance)) {
            $class = __CLASS__;
            self::$_instance = new $class();
        }
        return self::$_instance;
    }

    public function getNum() {
        /**
         * @var $num
         * @return $num
         *  сколько юзверей мы выводим в странице поиска
         */
        $num = 7;
        return $num;
    }

    public function getList() {
        /**
         * @author PeoneEr
         * @var $num
         * @var $page
         * @var $start
         * @return $playersList
         */
        $num = $this->getNum();
        $page = $this->getPage();
        $start = $this->mathStart($page, $num);
        $playersList = $this->returnPlayersList($start, $num);
        return $playersList;
    }

    public function countGet() {
        /**
         *  получаем общее число записей
         * @author PeoneEr
         */
        $count = $this->getCount();
        return $count;
    }

    public function getPage() {
        /**
         *  получаем страницу
         * @author PeoneEr
         * @var $page
         * @return $page
         */
        $page = $_GET['page'];
        $page = intval($page);
        if (!is_numeric($page) || $page < 1 || empty($page) || is_null($page) || !isset($page)) {
            $page = 1;
        }
        $total = $this->mathTotal();
        if ($page > $total)
            $page = $total;
        return $page;
    }

    public function mathTotal() {
        /**
         *  высчитываем общее число страниц
         * @author PeoneEr
         */
        $count = $this->countGet();
        $num = $this->getNum();
        $total = intval(($count - 1) / $num) + 1;
        return $total;
    }

    public function mathStart($page, $num) {
        /**
         *  Начиная с какого номера выбирать записи
         * @author PeoneEr
         */
        $start = $page * $num - $num;
        return $start;
    }

    public function names() {
        /**
         *  список ников
         */
        $names = $this->getNames();
        return $names;
    }

    public function charsOnOneAccount($nick) {
        /**
         *  проверка, на разных аккаунтах чары или на одном
         * @return true ? false
         * @see core/application/models/musers/musers12.php
         */
        return $this->isOneAccount($nick);
    }

    public function returnInfo() {
        /**
         *  Возвращает информацию по нику
         * @var $name
         */
        $name = $_GET['name'];
        if (empty($name) || is_null($name) || !isset($name)) {
            error::getInstance('Вероятно не был введен ник на предыдущей странице');
        }
        return $this->getInfoAboutFriend($name);
    }

    public function addToFriendList() {
        /**
         *  получаем параметры
         * @var array $params
         */
        $this->_lang = $this->getLanguage();
        $this->_params = array(
            'player' => $_GET['player'],
            'friend' => $_GET['friend'],
            'id' => $_GET['id']
        );
        /**
         *  Проверка на онлайн персонажа
         * @method isOnline()
         */
        if (isOnline::getInstance()->online($this->_params['player'])) {
            $this->echoError("Ваш персонаж находится в игре. Сейчас Вы не можете добавить себе в друзья " . $this->_params['friend'] . ". Выйдите из игры своим персонажем и попробуйте ещё разок");
            requests_Controller::getInstance()->setStatusDefault('0', $_GET['id']);
        }
        if (isOnline::getInstance()->online($this->_params['friend'])) {
            $this->echoError("Игрок " . $this->_params['friend'] . "находится в игре, сейчас Вы не можете добавить его в список друзей. Попробуйте позднее");
            requests_Controller::getInstance()->setStatusDefault('0', $_GET['id']);
        }
        /**
         *  проверка массива на пустые значения (что вряд ли, но мало ли?)
         */
        try {
            foreach ($this->_params as $key => $val) {
                if (empty($val)) {
                    $this->redirect(0, "index");
                    unset($key);
                    exit("<script language='JavaScript'> alert ('Вероятно одно из значений пустое. Ололо...'); </script>");
                }
            }
        } catch (Exception $exc) {
            echo $exc->getMessage();
        }
        /**
         *  может они дружат уже?
         * @method isFriends()
         * @method getSelfPlayerId()
         * @method getFriendPlayerId()
         */
        //пытаемся добавить в друзья и вывести сообщение
        try {
            $this->addToFriend($this->getSelfPlayerId($this->_params['player']), $this->getFriendPlayerId($this->_params['friend']));
            $this->echoSuccess("Игрок " . $this->_params['friend'] . " успешно добавлен в список друзей для чара " . $this->_params['player']);
            //если добавить в друзья удалось - обновление статуса предложения
            requests_Controller::getInstance()->setStatusDefault('1', $_GET['id']);
            //Не получилось
        } catch (Exception $e) {
            echo $e->getMessage();
            error::getInstance($this->_lang->language['defaultError']);
        }
        unset($this->_params);
    }

    public function sendMessageTo() {
        /**
         * @non phpdoc
         * Заметка: используем две глобальные переменные в отправке сообщений. Может быть это увеличит нагрузку. Кто хочет - может переписать.
         */
        //Получаем параметры методом $_POST
        $this->_params = array(
            'theme' => $_POST['theme'],
            'message' => $_POST['text']
        );
        //перебор массива на наличие пустых значений
        foreach ($this->_params as $key => $val) {
            if (empty($val) || is_null($val) || !isset($val)) {
                unset($key);
                $this->echoError("Не заполнен один или несколько обязательных пунктов, таких как тема, сообщение");
            }
        }
        //Получаем ID для нового сообщения
        $this->_id = $this->getMaxMailId() + 1;
        //Получаем текущий счет аккаунта
        $this->_balance = Cmoney::getInstance()->showMoney();
        if ($this->_balance - valueSelect::selectValue(17) < 1) {
            $this->echoError($lang->language['noEnoughBalance']);
        }
        if (isOnline::getInstance()->online($_POST['from'])) {
            $this->echoError("Ваш персонаж " . $_POST['from'] . " находится в игре. Невозможно отправить сообщение с него");
        }
        if (isOnline::getInstance()->online($_POST['to'])) {
            $this->echoError("Персонаж " . $_POST['to'] . ", которому Вы пытаетесь отправить сообщение с персонажа " . $_POST['from'] . " находится в игре. Отправить сообщение невозможно");
        }
        if ($this->isOneAccount($_POST['to'])) {
            $this->echoError("Персонаж, которому Вы пытаетесь отправить сообщение находится на Вашеа аккаунте");
        }
        if (isset($_POST['typeMessage']) && $_POST['typeMessage'] == 'express') {
            $this->_express = 1;
            try {
                $this->_newBalance = $this->_balance - valueSelect::selectValue(18);
                try {
                    $this->sendExpressMessage($this->_id, $this->getFriendPlayerId($_POST['to']), $_POST['from'], $this->_params['theme'], $this->_params['message'], $this->_express);
                    $this->echoSuccess("Ваше сообщение персонажу <b>" . $_POST['to'] . "</b> от персонажа <b>" . $_POST['from'] . "</b> успешно отправлено. С Вашего счета списано " . valueSelect::selectValue(18) . "Y.E <br /> У Вас осталось " . $this->_newBalance);
                } catch (Exception $e) {
                    echo $e->getMessage();
                    error::getInstance($lang->language['defaultError']);
                }
            } catch (Exception $e) {
                echo $e->getMessage();
            }
        } else if (isset($_POST['typeMessage']) && $_POST['typeMessage'] == 'normal') {
            $this->_express = 0;
            try {
                $this->_newBalance = $this->_balance - valueSelect::selectValue(17);
                try {
                    $this->sendExpressMessage($this->_id, $this->getFriendPlayerId($_POST['to']), $_POST['from'], $this->_params['theme'], $this->_params['message'], $this->_express);
                    $this->echoSuccess("Ваше сообщение персонажу <b>" . $_POST['to'] . "</b> от персонажа <b>" . $_POST['from'] . "</b> успешно отправлено. С Вашего счета списано " . valueSelect::selectValue(17) . "Y.E <br /> У Вас осталось " . $this->_newBalance);
                } catch (Exception $e) {
                    echo $e->getMessage();
                    error::getInstance($lang->language['defaultError']);
                }
            } catch (Exception $e) {
                echo $e->getMessage();
            }
        } else {
            $this->echoError($this->_lang->language['defaultError']);
        }
        try {
            Cmoney::getInstance()->updateMoney($this->_newBalance);
        } catch (Exception $e) {
            echo $e->getMessage();
            error::getInstance($lang->language['defaultError']);
        }
    }

}

?>